package financeiro.usuario;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

public class UsuarioDAOHibernate implements UsuarioDAO{
	private Session sessao;
	
	public void setSession(Session session){
		this.sessao = session;
	}

	
	public void salvar(Usuario usuario) {
		this.sessao.save(usuario);		
	}

	public void atualizar(Usuario usuario) {
            if(usuario.getPermissao() == null || usuario.getPermissao().size() == 0){
                Usuario usuarioPermissao = this.carregar(usuario.getCodigo());
                usuario.setPermissao(usuarioPermissao.getPermissao());
                this.sessao.evict(usuarioPermissao);
            }
            	this.sessao.update(usuario);
	}

	public void excluir(Usuario usuario) {
		this.sessao.delete(usuario);
	}

	public Usuario carregar(Integer codigo) {
		return (Usuario) this.sessao.get(Usuario.class, codigo);
	}

	public Usuario buscaPorLogin(String login) {
		String hql = "select u from Usuario u where u.login = :login";
		Query consulta = this.sessao.createQuery(hql);
		consulta.setString("login", login);
		return (Usuario) consulta.uniqueResult();
	}

	public List<Usuario> listar() {
		return this.sessao.createCriteria(Usuario.class).list();
	}

}
